package es.uned.etsii.si3.taller;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import com.j256.ormlite.field.DataType;
import java.util.Date;
import java.math.BigDecimal;
import java.sql.SQLException;

@DatabaseTable(tableName = "trabajo")
public
class Trabajo extends Persistente {
	public static final String ID_FIELD_NAME = "id";
	public static final String ID_USUARIO_FIELD_NAME = "id_usuario";
	public static final String ID_REPARACION_FIELD_NAME = "id_reparacion";
	public static final String DESCRIPCION_FIELD_NAME = "descripcion";
	public static final String FECHARECEPCION_FIELD_NAME = "fechaRecepcion";
	public static final String FECHAESTIMADA_FIELD_NAME = "fechaEstimada";
	public static final String FECHAFIN_FIELD_NAME = "fechaFin";
	public static final String VISTOBUENOJS_FIELD_NAME = "vistoBuenoJS";
	public static final String HORAS_FIELD_NAME = "horas";
	public static final String COSTEHORA_FIELD_NAME = "costeHora";
		

	@DatabaseField(generatedId = true)
	int id;
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_USUARIO_FIELD_NAME)
	Usuario usuario; 				// Mecánico que tiene el trabajo asignado
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_REPARACION_FIELD_NAME)
	Reparacion reparacion; 			// Reparación a que pertenece el trabajo
	@DatabaseField(width = 100)
	String descripcion;				// Descripción del trabajo
	@DatabaseField(dataType=DataType.DATE, columnName= FECHARECEPCION_FIELD_NAME)
	Date fechaRecepcion;			// Fecha de recepción del trabajo por parte del mecánico. 
									// Si null significa que no ha sido recepcionado 
	@DatabaseField(dataType=DataType.DATE, columnName= FECHAESTIMADA_FIELD_NAME)
	Date fechaEstimada;				// Fecha en que el mecánico estima que acabará el trabajo
	@DatabaseField(dataType=DataType.DATE, columnName= FECHAFIN_FIELD_NAME)
	Date fechaFin;					// Fecha en que el mecánico acaba el trabajo.
									// Si null significa que aun no se ha acabado
	@DatabaseField(columnName= VISTOBUENOJS_FIELD_NAME)
	boolean vistoBuenoJS;			// Visto Bueno por parte del JS (cierra el trabajo)
	@DatabaseField	
	int horas;						// horas de trabajo del mecánico
	@DatabaseField
	BigDecimal costeHora;			// coste por hora del trabajo

	/**
	 * Crea un objeto Trabajo a partir de los parámetros indicados
	 * Los objetos Trabajo están asociados a una reparación dada
	 * @param usuario
	 * @param reparacion
	 * @param descripcion
	 * @param fechaRecepcion
	 * @param fechaEstimada
	 * @param fechaFin
	 * @param vistoBuenoJS
	 * @param horas
	 * @param costeHora
	 * @return el objeto
	 * @throws SQLException
	 */
	public
	static Trabajo crear(Usuario usuario, Reparacion reparacion,
			String descripcion, Date fechaRecepcion, Date fechaEstimada, Date fechaFin,
			boolean vistoBuenoJS, int horas, BigDecimal costeHora)
			throws SQLException
	{
		Trabajo trabajo = new Trabajo();

		trabajo.setUsuario(usuario);
		trabajo.setReparacion(reparacion);
		trabajo.setDescripcion(descripcion);
		trabajo.setFechaRecepcion(fechaRecepcion);
		trabajo.setFechaEstimada(fechaEstimada);
		trabajo.setFechaFin(fechaFin);
		trabajo.setVistoBuenoJS(vistoBuenoJS);
		trabajo.setHoras(horas);
		trabajo.setCosteHora(costeHora);
		getClassDao(Trabajo.class).create(trabajo);

		return trabajo;
	}

	public
	Trabajo() {
		// ORM Lite necesita un constructor por defecto
	}

	public int         		getId()          		{ return id; }
	public Usuario			getUsuario()	 		{ return usuario; }
	public Reparacion		getReparacion() 		{ return reparacion; }
	public String 			getDescripcion() 		{ return descripcion; }
	public Date 			getFechaRecepcion() 	{ return fechaRecepcion; }
	public Date 			getFechaEstimada() 		{ return fechaEstimada; }
	public Date 			getFechaFin()	 		{ return fechaFin; }
	public boolean			getVistoBuenoJS()		{ return vistoBuenoJS; }
	public int				getHoras()				{ return horas; }
	public BigDecimal		getCosteHora()			{ return costeHora; }

	public
	void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public
	void setReparacion(Reparacion reparacion) {
		this.reparacion = reparacion;
	}

	public
	void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public
	void setFechaRecepcion(Date fechaRecepcion) {
		this.fechaRecepcion = fechaRecepcion;
	}

	public
	void setFechaEstimada(Date fechaEstimada) {
		this.fechaEstimada = fechaEstimada;
	}

	public
	void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}

	public
	void setVistoBuenoJS(boolean vistoBuenoJS) {
		this.vistoBuenoJS = vistoBuenoJS;
	}

	public
	void setHoras (int horas) {
		this.horas = horas;
	}

	public
	void setCosteHora (BigDecimal costeHora) {
		this.costeHora = costeHora;
	}
}